package view;

import java.io.File;
import java.io.IOException;
import javax.media.opengl.GLException;
import com.sun.opengl.util.texture.*;

public class TextureHandler {

	private static TextureHandler instance = null;

	private int numberOfTextures;
	private Texture[] textures;
	private String path;
	private boolean texturesLoaded = false; // Avoids problems like reloading
											// textures

	public static final int TEXTURE_TILE = 0;
	public static final int TEXTURE_WOOD = 1;
	public static final int TEXTURE_BORDA = 2;
	public static final int TEXTURE_CHAO = 3;
	public static final int TEXTURE_PAREDE = 4;
	public static final int TEXTURE_CEU = 5;

	/**
	 * Construtor da classe TextureHandler. Armazena em instance a inst�ncia
	 * da classe, para que exista apenas uma refer�ncia. Al�m disso
	 * inicializa o vetor de texturas com o n�mero total de texturas da
	 * aplica��o
	 */
	public TextureHandler(String Path) {
		numberOfTextures = 6;
		textures = new Texture[numberOfTextures];
		path = Path;
		TextureHandler.instance = this;
	}

	/**
	 * M�todo de acesso � instancia da classe TextureHandler. esse m�todo
	 * deve ser chamado depois da inicializacao da inst�ncia atrav�s do
	 * construtor
	 * 
	 * @return Uma inst�ncia da classe TextureHandler.
	 */
	public static TextureHandler instanceOf() {
		return instance;
	}

	/**
	 * M�todo que carrega as texturas de imagens, criando elas e
	 * armazenando-as em um vetor
	 */
	public void loadTextures() {
		if (!texturesLoaded) {
			try {
				File f = new File(path + "tile1.jpg");
				File g = new File(path + "Wood1.jpg");
				File h = new File(path + "borda1.jpg");
				File i = new File(path + "chao1.jpg");
				File j = new File(path + "parede1.jpg");
				File k = new File(path + "ceu1.jpg");
				textures[TEXTURE_TILE] = TextureIO.newTexture(f, true);
				textures[TEXTURE_WOOD] = TextureIO.newTexture(g, true);
				textures[TEXTURE_BORDA] = TextureIO.newTexture(h, true);
				textures[TEXTURE_CHAO] = TextureIO.newTexture(i, true);
				textures[TEXTURE_PAREDE] = TextureIO.newTexture(j, true);
				textures[TEXTURE_CEU] = TextureIO.newTexture(k, true);
			} catch (IOException e) {
				e.printStackTrace();
			} catch (GLException e) {
				e.printStackTrace();
			}
			texturesLoaded = true;
		}
	}

	/**
	 * M�todo de acesso �s texturas
	 * 
	 * @param index
	 *            � o indice da textura desejada
	 * @return a textura no indice passado
	 */
	public Texture getTextureAt(int index) {
		return textures[index];
	}

}
